]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
parentalControlsManager: Don't log error when disabled
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 9 Jun 2023 13:41:03 +0000 (15:41 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 9 Jun 2023 14:37:36 +0000 (16:37 +0200)
We currently special-case the DISABLED error when initializing
filtering, but not on app filter changes.

While it seems reasonable that Malcontent.Manager wouldn't emit
the signal while disabled, that's not actually true: It is emitted
when any user account information tracked by AccountsServices
changes.

Even if the signal were limited to changes of the ParentalControls
extension, it would still get emitted when app filtering *becomes*
disabled.

So regardless of potential improvements in libmalcontent itself,
we should filter out the DISABLED consistently, both when creating
the initial filter and when updating it.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6749

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2796>

js/misc/parentalControlsManager.js

index e2192caea6b03e6f88a6edecd76a7a65c97cc925..48f0ca2dd546f9feb2ae7b06a76050c4d3a1ec02 100644 (file)
@@ -74,18 +74,10 @@ var ParentalControlsManager = GObject.registerClass({
         try {
             const connection = await Gio.DBus.get(Gio.BusType.SYSTEM, null);
             this._manager = new Malcontent.Manager({ connection });
-            this._appFilter = await this._manager.get_app_filter_async(
-                Shell.util_get_uid(),
-                Malcontent.ManagerGetValueFlags.NONE,
-                null);
+            this._appFilter = await this._getAppFilter();
         } catch (e) {
-            if (e.matches(Malcontent.ManagerError, Malcontent.ManagerError.DISABLED)) {
-                console.debug('Parental controls globally disabled');
-                this._disabled = true;
-            } else {
-                logError(e, 'Failed to get parental controls settings');
-                return;
-            }
+            logError(e, 'Failed to get parental controls settings');
+            return;
         }
 
         this._manager.connect('app-filter-changed', this._onAppFilterChanged.bind(this));
@@ -95,6 +87,25 @@ var ParentalControlsManager = GObject.registerClass({
         this.emit('app-filter-changed');
     }
 
+    async _getAppFilter() {
+        let appFilter = null;
+
+        try {
+            appFilter = await this._manager.get_app_filter_async(
+                Shell.util_get_uid(),
+                Malcontent.ManagerGetValueFlags.NONE,
+                null);
+        } catch (e) {
+            if (!e.matches(Malcontent.ManagerError, Malcontent.ManagerError.DISABLED))
+                throw e;
+
+            console.debug('Parental controls globally disabled');
+            this._disabled = true;
+        }
+
+        return appFilter;
+    }
+
     async _onAppFilterChanged(manager, uid) {
         // Emit 'changed' signal only if app-filter is changed for currently logged-in user.
         let currentUid = Shell.util_get_uid();
@@ -102,10 +113,7 @@ var ParentalControlsManager = GObject.registerClass({
             return;
 
         try {
-            this._appFilter = await this._manager.get_app_filter_async(
-                currentUid,
-                Malcontent.ManagerGetValueFlags.NONE,
-                null);
+            this._appFilter = await this._getAppFilter();
             this.emit('app-filter-changed');
         } catch (e) {
             // Log an error and keep the old app filter.